// Expo Router API
import { Navigator, Slot } from './views/Navigator';

export {
  useRouter,
  useUnstableGlobalHref,
  usePathname,
  useNavigationContainerRef,
  useGlobalSearchParams,
  useLocalSearchParams,
  useSegments,
  useRootNavigation,
  useRootNavigationState,
  useLoaderData,
} from './hooks';

export { router, Router } from './imperative-api';

export * from './link/Link';
export * from './link/elements';
export { useIsPreview } from './link/preview/PreviewRouteContext';

export { withLayoutContext } from './layouts/withLayoutContext';
export { Navigator, Slot };

// Expo Router Views
export { ExpoRoot } from './ExpoRoot';
export { Unmatched } from './views/Unmatched';
export { Sitemap } from './views/Sitemap';
export { useSitemap, SitemapType } from './views/useSitemap';
export { ErrorBoundaryProps } from './views/Try';
export { ErrorBoundary } from './views/ErrorBoundary';
export type { ScreenProps } from './useScreens';

// Platform
/**
 * @hidden
 */
export * as SplashScreen from './views/Splash';

// React Navigation
export { useNavigation } from './useNavigation';
export { useFocusEffect, EffectCallback } from './useFocusEffect';
export type { ResultState } from './fork/getStateFromPath';

export type { RedirectConfig } from './getRoutesCore';
export type { SingularOptions } from './useScreens';

export type * from './types';

export * from './color';

export {
  Badge,
  BadgeProps,
  Icon,
  IconProps,
  Label,
  LabelProps,
  VectorIcon,
  VectorIconProps,
} from './primitives';
